home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / tools / pmake / pmake.c next >
Text File  |  1998-10-03  |  19KB  |  871 lines

  1. /*
  2.     ÉVpostmake
  3.  
  4.     1997.09.19
  5.     1998.10.01 : ÉVâtâHü[â}âbâgé╔æ╬ë₧
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include <ctype.h>
  12. #define    VERSION    "2.00"
  13. typedef    unsigned char    uchar;
  14.  
  15. void    main( int argc, uchar *argv[] );
  16. void    usage( void );
  17. void    get_koumoku( int num_koumoku, uchar *str_ret_ptr );
  18. void    ke_test( uchar *strptr );
  19. int        str_ncmp( uchar *gen_todo, uchar *work_todo );
  20. void    number_check( uchar *juusyo2, uchar *juusyo1 );
  21. void    put_data( uchar shikibetu, uchar *juusyo );
  22. int        get_ken_code( uchar *moto );
  23. int        shiku_hantei( uchar *shiku, int yomi_ken );
  24. void    num_put( void );
  25. void    del_last_char( uchar workstr[128] );
  26. void    shiku_bunri( int yomi_ken );
  27. int        gun_bunri( int yomi_ken );
  28. void    syori( void );
  29.  
  30.  
  31. /*
  32.     âOâìü[âoâïò╧ÉöÉΘî╛
  33. */
  34. FILE    *ai,*bi;        /* âtâ@âCâïùp */
  35.  
  36. int    ctr,            /* âJâEâôâ^üiâIâtâZâbâgÄZÅoùpüj */
  37.     tousyo_sw = 0,        /* ôçé╡éσÅêù¥âXâCâbâ` */
  38.     old_kubun = 0,        /* Æ╝æOé╔Åêù¥é╡é╜âfü[â^é╠ÄsƼæ║ïµò¬ */
  39.     shiku_kubun = 0;    /* ÄsƼæ║ïµò¬ */
  40.  
  41. uchar    ken,            /* îºâRü[âh */
  42.     moto_str[256],        /* î│âtâ@âCâïé⌐éτé╠ôⁿù═ìsò█Ä¥ùpò╢ÄÜù± */
  43.     old_kugun[64],
  44.     gun_yomi[64],
  45.     tyouson_yomi[64],
  46.     gen_todo[9],        /* î╗ì▌Åêù¥Æåé╠ôsô╣ò{îºû╝ */
  47.     gen_shiku[23],        /* î╗ì▌Åêù¥Æåé╠ÄsïµîSƼæ║û╝ */
  48.     gen_shi[32],
  49.     gen_gun[32];
  50.  
  51. uchar    work_todo[9],
  52.     work_shiku[64],
  53.     work_shigun[64],
  54.     work_azamei[1024],
  55.     work_azamei2[128],
  56.     work_yomi[128];
  57.  
  58. uchar    seirei_toshi[12][2][10] = {        /* É¡ù▀ÄwÆΦôsÄs */
  59.     "ÄDûyÄs",    "╗┬╬▀█╝",
  60.     "ÉσæΣÄs",    "╛▌└▐▓╝",
  61.     "ÉτùtÄs",    "┴╩▐╝",
  62.     "ëíòlÄs",    "╓║╩╧╝",
  63.     "É∞ìΦÄs",    "╢▄╗╖╝",
  64.     "û╝î├ë«Äs",    "┼║▐╘╝",
  65.     "ï₧ôsÄs",    "╖╓│─╝",
  66.     "æσìπÄs",    "╡╡╗╢╝",
  67.     "É_î╦Äs",    "║│═▐╝",
  68.     "ìLôçÄs",    "╦█╝╧╝",
  69.     "ûkïπÅBÄs",    "╖└╖╒│╝╒│╝",
  70.     "òƒë¬Äs",    "╠╕╡╢╝"
  71.     };
  72.  
  73. int    seirei_toshisuu = 12;
  74.  
  75. uchar    tousyo[9][2][11] = {        /* ôçé╡éσ */
  76.     "æσôç",        "╡╡╝╧",
  77.     "ùÿôç",        "─╝╧",
  78.     "ÉVôç",        "╞▓╝▐╧",
  79.     "É_Æ├ôç",    "║│┬▐╝╧",
  80.     "ÄOæεôç",    "╨╘╣╝▐╧",
  81.     "îΣæáôç",    "╨╕╫╝▐╧",
  82.     "ö¬ÅΣôç",    "╩┴╝▐╓│╝▐╧",
  83.     "É┬âPôç",    "▒╡╢▐╝╧",
  84.     "żè}î┤Åöôç",    "╡╢▐╗▄╫╝╓─│"
  85.     };
  86.  
  87. int    tousuu = 9;
  88.  
  89. /*
  90.     âüâCâô
  91. */
  92. void
  93. main( int argc, uchar *argv[] )
  94. {
  95.     setvbuf( stdout, NULL, _IONBF, 0 );    /* òWÅÇÅoù═é╠âoâbâtâ@ï╓Ä~ */
  96.                         /* é▒é┴é┐é╠ò√é¬ò\Īé¬é⌐é┴é▒ù╟éóé╠é┼ */
  97.  
  98.     tousyo_sw = 0;
  99.  
  100.     /* ai : î│âtâ@âCâï all.csv */
  101.     if( (ai = fopen( "all.csv", "rt")) == NULL) {
  102.         puts("ò╧è╖î│âtâ@âCâï all.csv é¬âIü[âvâôé┼é½é▄é╣é±üB");
  103.         usage();
  104.         exit( 1 );
  105.     }
  106.  
  107.     /* bi : Åöî│âtâ@âCâï post.dat */
  108.     if( (bi = fopen( "post.dat", "wt")) == NULL) {
  109.         puts("Åöî│âtâ@âCâï post.dat é¬âIü[âvâôé┼é½é▄é╣é±üB");
  110.         usage();
  111.         exit( 1 );
  112.     }
  113.  
  114.     ken = 0;    /* îºâRü[âhé═é╞éΦéáéªé╕éO */
  115.     ctr = 0;    /* âJâEâôâ^âèâZâbâg */
  116.     gen_todo[ 0 ] = '\0';        /* î╗ì▌Åêù¥Æåé╠ôsô╣ò{îºû╝ */
  117.     gen_shiku[ 0 ] = '\0';        /* î╗ì▌Åêù¥Æåé╠ÄsïµÆ¼æ║û╝ */
  118.  
  119.     /*
  120.         û{Åêù¥
  121.     */
  122.     do {
  123.         if( fgets( moto_str, 256, ai ) == NULL ) {
  124.             if( feof(ai) ) {
  125.                 break;
  126.             } else {
  127.                 printf("âtâ@âCâïô╟é▌ì₧é▌âGâëü[\n");
  128.                 usage();
  129.                 exit(1);
  130.             }
  131.         }
  132.         syori();    /* ÆåÉgé≡Åêù¥ */
  133.  
  134.     } while( 1 );
  135.  
  136.     puts("");
  137.     fclose( ai );
  138.     fclose( bi );
  139.  
  140.     return;
  141. }
  142.  
  143.  
  144. /*
  145.     Ägùpû@ò\Ī
  146. */
  147. void
  148. usage()
  149. {
  150.     printf("ùXò╓ö╘ìåâtâ@âCâïò╧è╖âvâìâOâëâÇ postmake Ver %s",VERSION);
  151.     printf(" Created by Æåæ║ù▓É╢üiû₧èJÉ╗ì∞Åèüj 1993.\n\n");
  152.     printf("Ägùpû@üFpostmake <î│âtâ@âCâïû╝éP> <î│âtâ@âCâïû╝éQ>\n");
  153.     printf("    âJâîâôâgâfâBâîâNâgâèé╔ùXò╓ö╘ìåâtâ@âCâï post.dat é╞");
  154.     printf("âIâtâZâbâg post.ofs é≡ì∞ɼé╡é▄é╖üB\n");
  155.  
  156.     return;
  157. }
  158.  
  159.  
  160. /*
  161.     ìÇû┌ĵô╛
  162.  
  163.     ùvïüÄdùlüF
  164.         moto_str é╠éÄö╘û┌é╠ìÇû┌é≡ĵô╛é╖éΘüB
  165.         ô╛é╜ò╢ÄÜù±é═str_ret_ptré╔èiö[é╖éΘüB
  166.         ìÇû┌é═òKé╕â_âuâïâNâHü[âeü[âVâçâôé┼ê═é▄éΩé─éóéΘéαé╠é╞é╖éΘüB
  167.  
  168.         ìÇû┌âXâLâbâvé╠û┌ê≤é╔é═âJâôâ}é╞ " é≡Ägùpé╡é─éóéΘé¬üAâVâtâgéiéhéré╠
  169.         ò╢ÄÜé╔é═âJâôâ}é╞ " é═Ägùpé╡é─éóé╚éóüB
  170. */
  171. void
  172. get_koumoku( int num_koumoku, uchar *str_ret_ptr )
  173. {
  174.     int    i1,    /* âïü[âvö─ùp */
  175.         len;
  176.  
  177.     uchar    *moto_ptr,    /* âÅü[âNé╠â|âCâôâ^ */
  178.         *check_ptr;    /* â`âFâbâNùpé╠â|âCâôâ^ */
  179.  
  180.     check_ptr = str_ret_ptr;    /* â|âCâôâ^é╠æ╥ö≡ */
  181.  
  182.     moto_ptr = moto_str;    /* â|âCâôâ^é╠âZâbâg */
  183.  
  184.     /*
  185.         ìÇû┌é╠ô¬Åoé╡
  186.     */
  187.     for( i1=1; i1<=num_koumoku-1; ++i1 ) {
  188.         while( (*moto_ptr++) != ',' )    /* Äƒé╠üu,üvé▄é┼ô╟é▌é╞é╬é╡ */
  189.             ;
  190.     }
  191.     moto_ptr++;    /* é╗é╠ăé╠üu"üvéαô╟é▌é╞é╬é╡ */
  192.  
  193.     for(;;) {                /* Äƒé╠üu"üvé▄é┼ò╢ÄÜù±é≡òíÄ╩ */
  194.         if( *moto_ptr != '\"' && *moto_ptr != ' ' ) {    /* üu"üvé╞ö╝èpSPé═ */
  195.             *str_ret_ptr++ = *moto_ptr++;        /*  òíÄ╩é╡é╚éó */
  196.         } else {
  197.             break;
  198.         }
  199.     }
  200.  
  201.     *str_ret_ptr = '\0';    /* ÅIÆ[ïLìåé╠òtë┴ */
  202.  
  203.     if( num_koumoku == 4 || num_koumoku == 5 || num_koumoku == 6 ) {
  204.  
  205.         len = strlen( check_ptr );
  206.         for( i1=0; i1<=len-1; i1++ ) {
  207.             if( *check_ptr == 0xaf ) {        /* » */
  208.                 *check_ptr = 0xc2;        /* ┬ */
  209.             } else if( *check_ptr == 0xac ) {    /* ¼ */
  210.                 *check_ptr = 0xd4;        /* ╘ */
  211.             } else if( *check_ptr == 0xad ) {    /* ¡ */
  212.                 *check_ptr = 0xd5;        /* ╒ */
  213.             } else if( *check_ptr == 0xae ) {    /* « */
  214.                 *check_ptr = 0xd6;        /* ╓ */
  215.             }
  216.             check_ptr++;
  217.         }
  218.     } else {
  219.         ke_test( check_ptr );    /* âòé╞âûé╠âeâXâg */
  220.     }
  221.  
  222.     return;
  223. }
  224.  
  225.  
  226. /*
  227.     âòé╞âûé╠âeâXâg
  228.  
  229.     âòé⌐âûé≡î⌐òté»é╜éτüAé╗éΩé╝éΩâJé╞âPé╔ò╧è╖é╖éΘ
  230. */
  231. void
  232. ke_test( uchar *strptr )
  233. {
  234.     int    i1 = 0,        /* âïü[âvö─ùp */
  235.         len = 0;    /* Æ╖é│ */
  236.  
  237.     len = strlen( strptr );
  238.  
  239.     for( i1=0; i1<=len-1; i1+=2 ) {        /* æ╬Å█é═æSòöæSèpé╚é╠é┼éQî┬é╞é╬é╡ */
  240.  
  241.         if( *strptr == 0x83 ) {        /* 83 ücüc âòé╞âûé╠éPâoâCâgû┌ */
  242.  
  243.             strptr++;    /* éPî┬Éié▀éΘ */
  244.  
  245.             if( *strptr == 0x95 ) {        /* âò */
  246.                 *strptr = 0x4a;        /* âJ */
  247.             } else if( *strptr == 0x96 ) {    /* âû */
  248.                 *strptr = 0x50;        /* âP */
  249.             }
  250.  
  251.             strptr++;    /* éPî┬Éié▀éΘ */
  252.         } else {
  253.  
  254.             strptr += 2;    /* éQî┬Éié▀éΘ */
  255.         }
  256.     }
  257.  
  258.     return;
  259. }
  260.  
  261.  
  262. /*
  263.     ìéæ¼é╚üiéñé╗üjò╢ÄÜù±Å╞ìçâïü[â`âô
  264. */
  265. int
  266. str_ncmp( uchar *gen_todo, uchar *work_todo )
  267. {
  268.     if( *gen_todo != *work_todo ) {        /* é▄é╕ɵô¬éPò╢ÄÜé≡öΣèré╡é─é╡é▄éñ */
  269.         return 1;
  270.     }
  271.  
  272.     return ( strcmp( gen_todo, work_todo ) );
  273. }
  274.  
  275.  
  276. /*
  277.     ÉöÄÜâ`âFâbâN
  278.  
  279.     æSèpÉöÄÜé≡ö╝èpÉöÄÜé╔é╡é─ò╘é╖
  280. */
  281. void
  282. number_check( uchar *juusyo2, uchar *juusyo1 )
  283. {
  284.     int    len_str = 0,    /* ò╢ÄÜù±Æ╖é│ */
  285.         i1 = 0;        /* âïü[âvö─ùp */
  286.  
  287.     len_str = strlen( juusyo1 );
  288.  
  289.     for( i1=0; i1<=len_str-1; i1++ ) {
  290.  
  291.         if( isdigit( (int)*juusyo1 ) ) {    /* é╖é┼é╔ö╝èpÉöÄÜüüùXò╓ö╘ìå */
  292.             *juusyo2++ = *juusyo1++;    /* éPâoâCâgé╛é» */
  293.             continue;
  294.         }
  295.  
  296. //        if( *juusyo1 == 0x82 ) {            /* æSèpÉöÄÜé╠éPâoâCâgû┌üH */
  297. //
  298. //            if( (*(juusyo1+1) <= 0x59) && (*(juusyo1+1) >= 0x4f) ) {
  299. //                ++juusyo1;                /* éPî┬Éié▀éΘ */
  300. //                *juusyo2++ = (*juusyo1++) - 0x1f;    /* ö╝èpÉöÄÜë╗ */
  301. //            } else {
  302. //                *juusyo2++ = *juusyo1++;    /* é╜é╘é±æSèp */
  303. //                *juusyo2++ = *juusyo1++;
  304. //            }
  305. //        } else {
  306.             *juusyo2++ = *juusyo1++;        /* æSèpé╛é╞éóéóé╚ */
  307.             *juusyo2++ = *juusyo1++;
  308. //        }
  309.  
  310.         ++i1;    /* é╨éªü` */
  311.     }
  312.  
  313.     *juusyo2 = '\0';    /* ÅIÆ[ò╢ÄÜé≡âZâbâg */
  314.  
  315.     return;
  316. }
  317.  
  318.  
  319. /*
  320.     ÅZÅèâfü[â^Åoù═
  321.  
  322.     ö╝èpëpÄÜéPò╢ÄÜé╞ÅZÅèé≡Ä≤é»ÄµéΘüB
  323.     ëpÄÜéPò╢ÄÜé╞ÅZÅèé≡é╗é╠é▄é▄ ci é╔Åæé½Åoé╡üA
  324.     âOâìü[âoâïò╧Éö ctr é╔éPü{üiÅZÅèé╠ò╢ÄÜÉöüjé≡æ½é╡ì₧é▐üB
  325. */
  326. void
  327. put_data( uchar shikibetu, uchar *juusyo )
  328. {
  329.     uchar    juusyo2[1024],    /* Ä≤é»ÄM */
  330.         *j2_ptr;
  331.  
  332.     j2_ptr = juusyo2;    /* â|âCâôâ^âZâbâg */
  333.  
  334.     number_check( j2_ptr, juusyo );    /* ÉöÄÜâ`âFâbâN */
  335.  
  336.     fputc( shikibetu, bi );
  337.     fputs( j2_ptr, bi );
  338.     ctr += (1 + strlen( j2_ptr ) );
  339.  
  340.     return;
  341. }
  342.  
  343.  
  344. /*
  345.     éαéτé┴é╜ìsé⌐éτîºâRü[âhé≡ÆèÅoé╡é─ò╘é╖
  346. */
  347. int
  348. get_ken_code( uchar *moto )
  349. {
  350.     uchar    ch1, ch2;
  351.  
  352.     ch1 = moto[0];
  353.     ch2 = moto[1];
  354.  
  355.     return ((ch1 - 0x30) * 10) + (ch2 - 0x30);
  356. }
  357.  
  358.  
  359. /*
  360.     ÄsïµîSö╗ÆΦ
  361.  
  362.     ûûö÷é╠éPÄÜé≡î⌐é─üAÄsïµîSé╠ö╗ÆΦé≡ìséóüAû▀éΦÆlé╞é╖éΘüB
  363.  
  364.         éPüüÄsü@éQüüÄsôαïµü@éRüüô┴ò╩ïµü@éSüüîSü{Ƽü@éTüüîSü{æ║
  365. */
  366. int
  367. shiku_hantei( uchar *shiku, int yomi_ken )
  368. {
  369.     int    kubun = 0,    /* Äsïµïµò¬ */
  370.         len_shiku;    /* Æ╖é│èiö[ùp */
  371.     uchar    moji_work[3];    /* æSèpéQò╢ÄÜâÅü[âN */
  372.  
  373.     len_shiku = strlen( shiku );    /* é▄é╕Æ╖é│é≡ô╛éΘ */
  374.  
  375.     moji_work[0] = shiku[len_shiku-2];    /* ûûö÷é╠éPò╢ÄÜüié╜é╛é╡æSèpüjé≡ô╛éΘ */
  376.     moji_work[1] = shiku[len_shiku-1];
  377.     moji_work[2] = '\0';
  378.     /* î┤ÄnôIé╚Äûé≡éΓé┴é─é▄é╖é¬üAÆPé╚éΘ */
  379.     /* ÄΦö▓é½é┼é╖é╠é┼ïCé╔é╡é╚éóé┼éóéóé┼é╖ */
  380.  
  381.     if( str_ncmp( moji_work, "Äs" ) == 0 ) {
  382.         kubun = 1;    /* ÆPé╚éΘÄs */
  383.  
  384.     } else if( str_ncmp( moji_work, "ïµ" ) == 0 ) {
  385.         if( yomi_ken == 13 ) {    /* ôîï₧ôsôαé┼éáéΘ */
  386.             kubun = 3;    /* ôîï₧ôsô┴ò╩ïµ */
  387.         } else {
  388.             kubun = 2;    /* É¡ù▀ÄwÆΦôsÄsôαé╠ïµ */
  389.         }
  390.  
  391.     } else if( str_ncmp( moji_work, "Ƽ" ) == 0 ) {
  392.         kubun = 4;    /* Æ¼ */
  393.     } else if( str_ncmp( moji_work, "æ║" ) == 0 ) {
  394.         kubun = 5;    /* æ║ */
  395.     } else {
  396.         printf("FAIL : ûûö÷é¬ÄsïµÆ¼æ║é┼é╚éóüi|%s|üj\n",moji_work);
  397.         exit(1);
  398.     }
  399.  
  400.     return( kubun );
  401. }
  402.  
  403.  
  404. /*
  405.     ùXò╓ö╘ìåé╠èlô╛é╞ÅæÅo
  406. */
  407. void
  408. num_put()
  409. {
  410.     uchar    bangou[8],        /* ùXò╓ö╘ìåùpâÅü[âN */
  411.         kban[8];        /* ïîö╘ìå */
  412.  
  413.     get_koumoku( 3, bangou );    /* ùXò╓ö╘ìåé≡ô╛éΘ */
  414.     get_koumoku( 2, kban );
  415. /*
  416. ïîö╘ìåé╞ÉVö╘ìåé╠öΣèrâ`âFâbâNüFîïì\êßéñé▒é╞é¬ò¬é⌐é┴é╜é╠é┼âRâüâôâgâAâEâg
  417.  
  418.     k_len = strlen( kban );
  419.  
  420.     for( i1=0; i1<=k_len-1; i1++ ) {
  421.         if( bangou[i1] != kban[i1] ) {
  422.             printf("ö╜ùßö¡î⌐ |%s| != |%s|\n",bangou,kban);
  423.             break;
  424.         }
  425.     }
  426. */
  427.  
  428.     put_data( '*', bangou );    /* ùXò╓ö╘ìåÅoù═ */
  429.     put_data( '\'', kban );        /* ïîö╘ìåÅoù═ */
  430.  
  431.     return;
  432. }
  433.  
  434.  
  435. /*
  436.     îπé╠æSèpéPò╢ÄÜé≡ìφÅ£é╖éΘ
  437. */
  438. void
  439. del_last_char( uchar workstr[128] )
  440. {
  441.     int    len_str = 0;
  442.  
  443.     len_str = strlen( workstr );
  444.  
  445.     workstr[ len_str - 2 ] = '\0';
  446.  
  447.     return;
  448. }
  449.  
  450.  
  451. /*
  452.     Äsïµò¬ùú
  453.  
  454.     É¡ù▀ÄwÆΦôsÄsé╠é▌üFÄsû╝é⌐éτïµû╝é≡ò¬ùúé╖éΘ
  455. */
  456. void
  457. shiku_bunri( int yomi_ken )
  458. {
  459.     int    nagasa=0,
  460.         nagasa2=0,
  461.         cnt=0,
  462.         toshi=0,
  463.         i1;
  464.  
  465.     uchar    basyo[64];
  466.  
  467.     nagasa = strlen( work_shiku );
  468.  
  469.     /* üuÄsüvé╠ÄÜé≡ÆTé╖ 8e73 */
  470.     /* éPò╢ÄÜû┌é╞ì┼îπé╠ò╢ÄÜé═ÆTé│é╚éó */
  471.     for( i1=2; i1<=nagasa-4; i1+=2 ) {
  472.         if( work_shiku[i1] == 0x8e && work_shiku[i1+1] == 0x73 ) {
  473.             cnt++;
  474.             basyo[cnt] = i1;
  475.         }
  476.     }
  477.  
  478.     switch( cnt ) {
  479.  
  480.     /* üuÄsüvé╠ò╢ÄÜé¬é╨é╞é┬éαé╚éóüüé¿é⌐é╡éó */
  481.     case 0:
  482.         printf("Äsé¬é╚éóüBé¿é⌐é╡éó|%s|\n",work_shiku);
  483.         break;
  484.  
  485.     /* üuÄsüvé╠ò╢ÄÜé¬é╨é╞é┬üüòüÆ╩ */
  486.     case 1:
  487.         /* Äsû╝é≡ò¬ùú */
  488.         for( i1=0; i1<=basyo[1]-1; i1++ ) {
  489.             work_shigun[i1] = work_shiku[i1];
  490.         }
  491.         work_shigun[basyo[1]] = '\0';
  492.         /* ïµû╝é≡ò¬ùú */
  493.         for( i1=basyo[1]+2; i1<=nagasa-1; i1++ ) {
  494.             work_shiku[i1-basyo[1]-2] = work_shiku[i1];
  495.         }
  496.         work_shiku[nagasa-basyo[1]-2] = '\0';
  497.  
  498.         /* Äsû╝é≡ô┴ÆΦ */
  499.         toshi = -1;
  500.         for( i1=0; i1<=seirei_toshisuu-1; i1++ ) {
  501.             if( strstr( work_yomi, seirei_toshi[i1][1] ) != NULL ) {
  502.                 toshi = i1;
  503.                 break;
  504.             }
  505.         }
  506.         if( toshi == -1 ) {
  507.             printf("Äsû╝é¬î╗éΩé╚é⌐é┴é╜üBé¿é⌐é╡éó|%s|\n",work_yomi);
  508.             return;
  509.         }
  510.  
  511.         /* Äsû╝é≡ò¬ùú */
  512.         strcpy( gun_yomi, seirei_toshi[toshi][1] );
  513.  
  514.         /* ïµû╝é≡ò¬ùú */
  515.         nagasa = strlen( work_yomi );
  516.         nagasa2 = strlen( seirei_toshi[toshi][1] );
  517.         for( i1=nagasa2; i1<=nagasa-1; i1++ ) {
  518.             tyouson_yomi[i1-nagasa2] = work_yomi[i1];
  519.         }
  520.         tyouson_yomi[nagasa - nagasa2] = '\0';
  521.  
  522.         break;
  523.  
  524.     case 2:
  525.         printf("Äsé¬é╙é╜é┬|%s|\n",gen_shiku);
  526.         break;
  527.  
  528.     /* é╗é╠æ╝üüé¿é⌐é╡éó */
  529.     default:
  530.         printf("Äsé¬éRé┬ê╚ÅπéáéΘüB|%s|\n",gen_shiku);
  531.         break;
  532.     }
  533.  
  534.     return;
  535. }
  536.  
  537.  
  538. /*
  539.     îSò¬ùú
  540.  
  541.     Æ¼æ║û╝é⌐éτîSû╝é≡ò¬ùúé╖éΘ
  542. */
  543. int
  544. gun_bunri( int yomi_ken )
  545. {
  546.     int    nagasa=0,
  547.         nagasa2 = 0,
  548.         ret = 0,
  549.         cnt=0,
  550.         shima = 0,
  551.         i1;
  552.  
  553.     uchar    basyo[64];
  554.  
  555.     nagasa = strlen( work_shiku );
  556.  
  557.     /* üuîSüvé╠ÄÜé≡ÆTé╖ 8c53 */
  558.     /* éPò╢ÄÜû┌é╞ì┼îπé╠ò╢ÄÜé═ÆTé│é╚éó */
  559.     for( i1=2; i1<=nagasa-4; i1+=2 ) {
  560.         if( work_shiku[i1] == 0x8c && work_shiku[i1+1] == 0x53 ) {
  561.             cnt++;
  562.             basyo[cnt] = i1;
  563.         }
  564.     }
  565.  
  566.     switch( cnt ) {
  567.  
  568.     /* üuîSüvé╠ò╢ÄÜé¬é╨é╞é┬éαé╚éóüüôîï₧ôsôçé╡éσé╠ô┴ùß */
  569.     case 0:
  570.         /* üuôçüvé╠ÄÜé≡ÆTé╖ */
  571.         for( i1=2; i1<=nagasa-4; i1+=2 ) {
  572.             if( work_shiku[i1] == 0x93 && work_shiku[i1+1] == 0x87 ) {
  573.                 cnt++;
  574.                 basyo[cnt] = i1;
  575.             }
  576.         }
  577.         /* Æ¼æ║û╝é≡ò¬ùú */
  578.         for( i1=basyo[1]+2; i1<=nagasa-1; i1++ ) {
  579.             work_shiku[i1-basyo[1]-2] = work_shiku[i1];
  580.         }
  581.         work_shiku[nagasa-basyo[1]-2] = '\0';
  582.  
  583.         /* ôçû╝é≡ô┴ÆΦ */
  584.         shima = -1;
  585.         for( i1=0; i1<=tousuu-1; i1++ ) {
  586.             if( strstr( work_yomi, tousyo[i1][1] ) != NULL ) {
  587.                 shima = i1;
  588.                 break;
  589.             }
  590.         }
  591.         if( shima == -1 ) {
  592.             printf("ôçû╝é¬î╗éΩé╚é⌐é┴é╜üBé¿é⌐é╡éó|%s|\n",work_yomi);
  593.             return 0;
  594.         }
  595.  
  596.         /* Æ¼æ║û╝é≡ò¬ùú */
  597.         nagasa = strlen( work_yomi );
  598.         nagasa2 = strlen( tousyo[shima][1] );
  599.         for( i1=nagasa2; i1<=nagasa-1; i1++ ) {
  600.             tyouson_yomi[i1-nagasa2] = work_yomi[i1];
  601.         }
  602.         tyouson_yomi[nagasa - nagasa2] = '\0';
  603.         ret = 1;
  604.  
  605.         if( tousyo_sw == 0 ) {
  606.             strcpy( work_shigun, "ôçé╡éσ" );
  607.             strcpy( gun_yomi, "─│╝╓" );
  608.             tousyo_sw = 1;
  609.         }
  610.         break;
  611.  
  612.     /* üuîSüvé╠ò╢ÄÜé¬é╨é╞é┬üüòüÆ╩üAé╙é╜é┬üüƼû╝é╠Æåé╔üuîSüvé╠ÄÜé¬ÄgéφéΩé─éóéΘ */
  613.     case 1:
  614.     case 2:
  615.         /* îSû╝é≡ò¬ùú */
  616.         for( i1=0; i1<=basyo[1]-1; i1++ ) {
  617.             work_shigun[i1] = work_shiku[i1];
  618.         }
  619.         work_shigun[basyo[1]] = '\0';
  620.         /* Æ¼æ║û╝é≡ò¬ùú */
  621.         for( i1=basyo[1]+2; i1<=nagasa-1; i1++ ) {
  622.             work_shiku[i1-basyo[1]-2] = work_shiku[i1];
  623.         }
  624.         work_shiku[nagasa-basyo[1]-2] = '\0';
  625.  
  626.         /* îSé╠ô╟é▌üu╕▐▌üvé╠ê╩Æué≡ô┴ÆΦ */
  627.         cnt = 0;
  628.         nagasa = strlen( work_yomi );
  629.         for( i1=2; i1<=nagasa; i1++ ) {
  630.             if( work_yomi[i1  ]==0xb8 &&
  631.                 work_yomi[i1+1]==0xde &&
  632.                 work_yomi[i1+2]==0xdd ) {
  633.                 cnt++;
  634.                 basyo[1] = i1;
  635.                 break;
  636.             }
  637.         }
  638.         /* îSû╝é╠ô╟é▌é≡ò¬ùú */
  639.         for( i1=0; i1<=basyo[1]+2; i1++ ) {
  640.             gun_yomi[i1] = work_yomi[i1];
  641.         }
  642.         gun_yomi[basyo[1]+3] = '\0';
  643.         /* Æ¼æ║û╝é╠ô╟é▌é≡ò¬ùú */
  644.         for( i1=basyo[1]+3; i1<=nagasa-1; i1++ ) {
  645.             tyouson_yomi[i1-basyo[1]-3] = work_yomi[i1];
  646.         }
  647.         tyouson_yomi[nagasa-basyo[1]-3] = '\0';
  648.  
  649.         break;
  650.  
  651.     /* é╗é╠æ╝üüé¿é⌐é╡éó */
  652.     default:
  653.         printf("é¿é⌐é╡éóüBüuîSüvé¬éRé┬ê╚Åπ|%s|",work_shiku);
  654.         break;
  655.     }
  656.  
  657.     return ret;
  658. }
  659.  
  660.  
  661. /*
  662.     û{Åêù¥
  663. */
  664. void
  665. syori()
  666. {
  667.     int    i1 = 0,
  668.         tou = 0,
  669.         touhenka = 0,
  670.         nagasa = 0,
  671.         hiraki = 0,    /* èJé½èçî╩Éö */
  672.         toji = 0,    /* ò┬é╢èçî╩Éö */
  673.         kakko_check = 0,
  674.         yomi_ken=0;
  675.  
  676.     uchar
  677.         shityou_henka = 0;
  678.  
  679.     /*
  680.         ò╧Éöé╠Åëè·ë╗
  681.     */
  682.  
  683.     yomi_ken = get_ken_code( moto_str );    /* éóé▄ô╟é±é╛ìsé╠îºâRü[âhé≡ô╛éΘ */
  684.  
  685.     /*
  686.         æµéVìÇü@ôsô╣ò{îºû╝é╠Åêù¥
  687.     */
  688.     get_koumoku( 7, work_todo );    /* ôsô╣ò{îºû╝é≡ô╛éΘ */
  689.     get_koumoku( 4, work_yomi );    /* é╗é╠ô╟é▌é≡ô╛éΘ */
  690.     if( str_ncmp( gen_todo, work_todo ) != 0 ) {    /* ÉVé╡éóôsô╣ò{îºû╝é┼éáéΘ */
  691.         put_data( ' ', work_todo );    /* âtâ@âCâïé╔Åæé½Åoé╡ */
  692.         put_data( '+', work_yomi );    /* ô╟é▌éα */
  693.         strcpy( gen_todo, work_todo );    /* ôsô╣ò{îºû╝é≡ìXÉV */
  694.         gen_shiku[0] = '\0';        /* ÄsïµîSƼæ║û╝é╠Åëè·ë╗ */
  695.         printf("\n\n%s\n",gen_todo);
  696.     }
  697.  
  698.     /*
  699.         æµéWìÇü@ÄsïµîSƼæ║û╝é╠Åêù¥
  700.     */
  701.     get_koumoku( 8, work_shiku );
  702.     get_koumoku( 5, work_yomi );
  703.  
  704.     old_kubun = shiku_kubun;
  705.     shiku_kubun = shiku_hantei( work_shiku, yomi_ken );    /* Äsé⌐ïµé⌐îSé⌐ö╗ÆΦé╖éΘ */
  706.  
  707.     if( str_ncmp( gen_shiku, work_shiku ) != 0 ) {    /* ÉVé╡éóÄsïµîSƼæ║û╝é┼éáéΘ */
  708.  
  709.         shityou_henka = 1;            /* ÉVé╡éóé╠é┼âtâëâOùºé─éΘ */
  710.         strcpy( gen_shiku, work_shiku );    /* ÄsïµîSƼæ║û╝é≡ìXÉV */
  711.         del_last_char( work_shiku );        /* ûûö÷é╠æSèpéPò╢ÄÜé≡ìφÅ£ */
  712.  
  713.         switch( shiku_kubun ) {
  714.  
  715.         /* Äs */
  716.         case 1:
  717.             if( old_kubun == 2 || old_kubun == 3 ) {    /* Æ╝æOé¬ïµé╚éτ */
  718.                 printf("\n");    /* ëⁿìsé╖éΘ */
  719.             }
  720.             put_data( '!', work_shiku );    /* âtâ@âCâïÅæé½Åoé╡ */
  721.             put_data( '+', work_yomi );
  722.             printf("%sÄs ", work_shiku );
  723.             break;
  724.  
  725.         /* É¡ù▀ÄwÆΦôsÄsôαé╠ïµ */
  726.         case 2:
  727.             strcpy( old_kugun, gen_gun );    /* Æ╝æOé╠Äsû╝é≡æ▐ö≡ */
  728.             shiku_bunri( yomi_ken );
  729.             if( str_ncmp( work_shigun, old_kugun ) != 0 ) {    /* Äsû╝é¬êßéñé╚éτ */
  730.                 if( old_kubun == 2 ) {    /* Æ╝æOé¬Äsôαïµé╚éτ */
  731.                     printf("\n");    /* ëⁿìsé╖éΘ */
  732.                 }
  733.                 strcpy( gen_gun, work_shigun );    /* Åêù¥Æåé╠Äsû╝é≡ìXÉV */
  734.                 put_data( '!', gen_gun );
  735.                 put_data( '+', gun_yomi );
  736.                 printf("%sÄs : ", gen_gun );
  737.             }
  738.             put_data( '$', work_shiku );
  739.             put_data( '+', tyouson_yomi );
  740.             printf("%sïµ ", work_shiku );
  741.             break;
  742.  
  743.         /* ô┴ò╩ïµ */
  744.         case 3:
  745.             put_data( '\"', work_shiku );    /* âtâ@âCâïÅæé½Åoé╡ */
  746.             put_data( '+', work_yomi );
  747.             printf("%sïµ ", work_shiku );
  748.             break;
  749.  
  750.         /* Æ¼ */
  751.         case 4:
  752.             if( old_kubun != 4 && old_kubun != 5 ) {
  753.                 gen_gun[0] = '\0';
  754.             }
  755.             strcpy( old_kugun, gen_gun );    /* Æ╝æOé╠îSû╝é≡æ▐ö≡ */
  756.             tou = gun_bunri( yomi_ken );
  757.             /* îSû╝é¬êßéñé╚éτüiôçé╡éσé≡Å£é¡üj */
  758. //            if( tou==0 && str_ncmp( work_shigun, old_kugun ) != 0 ) {
  759.             if( str_ncmp( work_shigun, old_kugun ) != 0 ) {
  760.                 strcpy( gen_gun, work_shigun );    /* Åêù¥ÆåîSû╝é≡ìXÉV */
  761.                 put_data( '#', gen_gun );
  762.                 put_data( '+', gun_yomi );
  763.                 printf("\n%sîS : ",gen_gun);
  764.             }
  765. //            if( touhenka == 0 && tou == 1 ) {    /* ôçé╡éσé╔ôⁿé┴é╜ */
  766. //                puts("");
  767. //                touhenka = 1;
  768. //            }
  769.             put_data( ':', work_shiku );    /* âtâ@âCâïÅæé½Åoé╡ */
  770.             put_data( '+', tyouson_yomi );
  771.             printf("%sƼ ", work_shiku );
  772.             break;
  773.  
  774.         /* æ║ */
  775.         case 5:
  776.             if( old_kubun != 4 && old_kubun != 5 ) {
  777.                 gen_gun[0] = '\0';
  778.             }
  779.             strcpy( old_kugun, gen_gun );    /* Æ╝æOé╠îSû╝é≡æ▐ö≡ */
  780.             tou = gun_bunri( yomi_ken );
  781.             /* îSû╝é¬êßéñé╚éτüiôçé╡éσé≡Å£é¡üj */
  782. //            if( tou==0 && str_ncmp( work_shigun, old_kugun ) != 0 ) {
  783.             if( str_ncmp( work_shigun, old_kugun ) != 0 ) {
  784.                 strcpy( gen_gun, work_shigun );    /* Åêù¥ÆåîSû╝é≡ìXÉV */
  785.                 put_data( '#', gen_gun );
  786.                 put_data( '+', gun_yomi );
  787.                 printf("\n%sîS : ", gen_gun);
  788.             }
  789. //            if( touhenka == 0 && tou == 1 ) {    /* ôçé╡éσé╔ôⁿé┴é╜ */
  790. //                puts("");
  791. //                touhenka = 1;
  792. //            }
  793.             put_data( ';', work_shiku );    /* âtâ@âCâïÅæé½Åoé╡ */
  794.             put_data( '+', tyouson_yomi );
  795.             printf("%sæ║ ", work_shiku );
  796.             break;
  797.  
  798.         }
  799.     }
  800.  
  801.     if( shityou_henka ) {    /* ò╧ë╗é╡é╜é╬é⌐éΦé┼éáéΘ */
  802.  
  803.         get_koumoku( 9, work_azamei );    /* ÄÜû╝é≡ô╛éΘ */
  804.  
  805.         if( strstr( work_azamei, "ê╚ë║é╔îfì┌é¬" ) == NULL ) {
  806.             /* ô¬é╠ìsé╚é╠é╔üuê╚ë║é╔îfì┌é¬é╚éóÅΩìçüvé¬é╚éó */
  807.             if( strstr( work_azamei, "êΩë~" ) == NULL ) {    /* êΩë~é┼éαé╚éó */
  808.                 /* êΩë~é╞éóéñÆnû╝éαéáéΘé¬üAé╗é╠Ä₧é═ shityou_henka é═
  809.                 ü@ü@ùºé┴é─éóé╚éóé═é╕é┼éáéΘé╠é┼ */
  810.                 printf("é¿é⌐é╡éóüBô¬é╠ìsé╚é╠é╔üuê╚ë║é╔îfì┌üvé¬é╚éó|%s|%s|\n",
  811.                     work_shiku,work_azamei);
  812.             }
  813.         }
  814.  
  815.         num_put();    /* ö╘ìåé≡Åæé¡üüèYôûé╚é╡Ä₧ö╘ìå */
  816.  
  817.         shityou_henka = 0;    /* âtâëâOÉQé╣éΘ */
  818.  
  819.     } else {
  820.  
  821.         /* ÄÜû╝Åêù¥ */
  822.         get_koumoku( 9, work_azamei );
  823.         get_koumoku( 6, work_yomi );
  824.  
  825.         /* èçî╩æ╢ì▌â`âFâbâN */
  826.         if( strstr( work_azamei, "üi" ) != NULL ) {    /* èçî╩é¬éáéΩé╬ */
  827.  
  828.             kakko_check = 0;
  829.             do {
  830.                 /* èçî╩Éöé≡Æ▓é╫éΘü@èJé½èçî╩üü0x8169üAò┬é╢èçî╩üü0x816a */
  831.                 nagasa = strlen( work_azamei );
  832.                 hiraki = 0;
  833.                 toji = 0;
  834.                 for( i1=0; i1<=nagasa-2; i1++ ) {    /* éQò╢ÄÜé¿é½ */
  835.                     if( work_azamei[i1  ] == 0x81 &&
  836.                         work_azamei[i1+1] == 0x69 ) {    /* üi */
  837.                         hiraki++;
  838.                     } else
  839.                     if( work_azamei[i1  ] == 0x81 &&
  840.                         work_azamei[i1+1] == 0x6a ) {    /* üj */
  841.                         toji++;
  842.                     }
  843.                 }
  844.                 /* ï╧ôÖé¬ÄµéΩé─éóé╚éóüüăé╠ìsé╔æ▒éóé─éóéΘ */
  845.                 if( hiraki - toji != 0 ) {
  846.  
  847.                     /* éαéñéPìsâQâbâgé╖éΘüüé▒éΩé═ê└æSé╔ĵéΩéΘé═é╕ */
  848.                     fgets( moto_str, 256, ai );
  849.                     get_koumoku( 9, work_azamei2 );    /* ìÇû┌âQâbâg */
  850.                     if( strlen( work_azamei ) + 
  851.                         strlen(work_azamei2) >= 2048 ) {
  852.                         printf("ò╢ÄÜù±é¬Æ╖é╖é¼éΘ:|%s|%s|\n",
  853.                         work_azamei,work_azamei2);
  854.                     }
  855.                     /* âRâôâJâ` */
  856.                     strcat( work_azamei, work_azamei2 );
  857.                 } else {
  858.                     kakko_check = 1;
  859.                 }
  860.             } while( kakko_check == 0 );
  861.         }
  862.  
  863.         put_data( '%', work_azamei );
  864.         put_data( '+', work_yomi );
  865.  
  866.         num_put();
  867.     }
  868.  
  869.     return;
  870. }
  871.